package com.itdr.protal.controller;


import com.itdr.common.Const;
import com.itdr.common.ServerResponse;
import com.itdr.pojo.User;
import com.itdr.pojo.vo.UserVO;
import com.itdr.protal.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;

/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author AirZhang
 * @since 2020-10-20
 */
@RestController
@RequestMapping("/user/")
public class UserController {

    @Autowired
    IUserService userService;


    /**
     * 用户注册
     *
     * @param u
     * @return
     */
    @PostMapping("register")
    public ServerResponse register(User u) {
        // 参数校验
        // 调用业务层执行业务逻辑
        return userService.register(u);
    }

    /**
     * 用户登录
     *
     * @param u
     * @param httpSession
     * @return
     */
    @PostMapping("login")
    public ServerResponse login(User u, HttpSession httpSession) {
        // 参数校验
        // 调用业务层执行业务逻辑
        ServerResponse login = userService.login(u);
        // 如果用户登录成功，保存用户当前数据到session中
        if (login.isSuccess()) {
            httpSession.setAttribute("u", login.getData());
        }
        return login;
    }

    /**
     * 退出登录
     * @param httpSession
     * @return
     */
    @GetMapping("out")
    public ServerResponse out(HttpSession httpSession) {
        // 参数校验
        // 判断当前用户是否登录
        if(httpSession.getAttribute("u") != null){
            // 移除session中的登录用户信息
            httpSession.removeAttribute("u");
        }
        return ServerResponse.toSuccess(Const.UserEnum.OUT_LOGIN.getDesc());
    }

    /**
     * 获取登录用户信息
     * @param httpSession
     * @return
     */
    @GetMapping("umsg")
    public ServerResponse umsg(HttpSession httpSession) {
        // 参数校验
        // 判断当前用户是否登录
        if(httpSession.getAttribute("u") == null){
            return ServerResponse.toFail(Const.UserEnum.NO_LOGIN.getCode(),Const.UserEnum.NO_LOGIN.getDesc());
        }
        // 获取session中的登录用户信息
        UserVO u = (UserVO) httpSession.getAttribute("u");
        return ServerResponse.toSuccess(u);
    }

    /**
     * 修改用户信息
     * @param u
     * @param httpSession
     * @return
     */
    @GetMapping("gmsg")
    public ServerResponse gmsg(User u,HttpSession httpSession) {
        // 参数校验
        // 判断当前用户是否登录
        if(httpSession.getAttribute("u") == null){
            return ServerResponse.toFail(Const.UserEnum.NO_LOGIN.getCode(),Const.UserEnum.NO_LOGIN.getDesc());
        }
        // 获取session中的登录用户信息
        UserVO uvo = (UserVO) httpSession.getAttribute("u");
        ServerResponse gmsg = userService.gmsg(uvo, u);
        if(gmsg.isSuccess()){
            httpSession.setAttribute("u",gmsg.getData());
        }
        return gmsg;
    }

    /**
     * 验证用户身份
     * @param u
     * @param httpSession
     * @return
     */
    @PostMapping("yzuser")
    public ServerResponse yzUser(User u,HttpSession httpSession) {
        // 参数校验
        // 判断当前用户是否登录
        if(httpSession.getAttribute("u") == null){
            return ServerResponse.toFail(Const.UserEnum.NO_LOGIN.getCode(),Const.UserEnum.NO_LOGIN.getDesc());
        }
        // 获取session中的登录用户信息
        UserVO uvo = (UserVO) httpSession.getAttribute("u");
        return userService.yzUser(uvo, u);
    }

    /**
     * 修改密保问题和答案
     * @param u
     * @param tk
     * @param httpSession
     * @return
     */
    @PostMapping("gmb")
    public ServerResponse gmb(User u,String tk,HttpSession httpSession) {
        // 参数校验
        // 判断当前用户是否登录
        if(httpSession.getAttribute("u") == null){
            return ServerResponse.toFail(Const.UserEnum.NO_LOGIN.getCode(),Const.UserEnum.NO_LOGIN.getDesc());
        }
        // 获取session中的登录用户信息
        UserVO uvo = (UserVO) httpSession.getAttribute("u");
        return userService.gmb(uvo, u,tk);
    }

    /**
     * 登录状态修改用户密码
     * @param oldPassWord
     * @param newPassWord
     * @param httpSession
     * @return
     */
    @PostMapping("ugmm")
    public ServerResponse ugmm(String oldPassWord,String newPassWord,HttpSession httpSession) {
        // 参数校验
        // 判断当前用户是否登录
        if(httpSession.getAttribute("u") == null){
            return ServerResponse.toFail(Const.UserEnum.NO_LOGIN.getCode(),Const.UserEnum.NO_LOGIN.getDesc());
        }
        // 获取session中的登录用户信息
        UserVO uvo = (UserVO) httpSession.getAttribute("u");
        return userService.ugmm(uvo,oldPassWord,newPassWord);
    }

    /**
     * 忘记密码（验证账户名）
     * @param userName
     * @return
     */
    @GetMapping("wpas")
    public ServerResponse wpas(String userName) {
        // 参数校验
        return userService.wpas(userName);
    }

    /**
     * 回答密保问题
     * @return
     */
    @GetMapping("mbanswer")
    public ServerResponse mbAnswer(String userName,String answer) {
        // 参数校验
        return userService.mbAnswer(userName,answer);
    }

    /**
     * 修改用户密码
     * @param userName
     * @param newPassWord
     * @param tk
     * @return
     */
    @PostMapping("gmm")
    public ServerResponse gmm(String userName,String newPassWord,String tk) {
        // 参数校验
        return userService.gmm(userName,newPassWord,tk);
    }
}

